# 目标：从 1~2022 中选出 10 个互不相同的数，使它们的和恰好为 2022
# dp[i][j] 表示将整数 i 拆分为 j 个互不相同正整数的方案数

n = 2022
k = 10

# 初始化 dp 数组
dp = [[0] * (k + 1) for _ in range(n + 1)]
dp[0][0] = 1  # 将 0 拆成 0 个数，有 1 种方式（空集）

# 遍历可选的每个数，从 1 到 n
for num in range(1, n + 1):
    # 倒序遍历防止重复使用同一个数
    for total in range(n, num - 1, -1):
        for count in range(k, 0, -1):
            dp[total][count] += dp[total - num][count - 1]

# 输出最终方案数
print(dp[n][k])  # 输出：379187662194355221
